
//闭包执行结果
// for(var i=0;i<=5;i++){
//     setTimeout(function(){
//         console.log(i);
//     },i*1000);
// }//6 6 6 6 6 6 一秒执行一次

//使用let改变闭包执行的缺陷
// for(let i=0;i<=5;i++){
//     setTimeout(function(){
//         console.log(i);
//     },i*1000);
// }

//使用立即执行函数
// for(var i=0;i<=5;i++){
//     (j => {
//         setTimeout(function() {
//             console.log(new Date, j)
//         }, j * 1000)
//     })(i) 
// }

//使用Generator函数
//使用for...of循环可以遍历Generator函数生成的Iterator对象，且此时不再需要调用next方法
function* foo(){
    for(let i=0;i<5;i++){
        yield i;
    }
    return 6;
}
for(let j of foo()){
    setTimeout(function(){
        console.log(new Date(),j);
    },j*1000);
}

//使用promise
function delay(time){
    return new Promise(function(resolve,reject){
        setTimeout(resolve,time);
    })
}
for(let i=0;i<5;i++){
    delay(i*1000).then(()=>console.log(new Date,i));
}